package com.wfm.leetcode.editor.cn;

import com.wfm.common.ListNode;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;

/**
 * 两个指针，i，j
 * j遍历，遇到非0，加到i上。遇到0，调整i的指向
 * 时O(n)
 * 空O(1)
 */
public class PTwo181合并零之间的节点{
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {

    public ListNode mergeNodes(ListNode head) {
        if (head==null) return null; // 没有节点，直接返回空
        ListNode i =head;
        ListNode j = i.next;
        if(j==null) return head; // 一个节点，直接返回head
        while (j!=null) {
            if(j.val!=0){ // 遇到非0，累加
                i.val+=j.val;
                j=j.next;
            }else{   // 遇到0
                if(j.next==null){ // 是最后一个0的情况
                    i.next=null;
                    break;
                }  // 其他中间遇到0的情况
                i=i.next;
                i.val=0;
                j=j.next;
            }
        }
        i=null; // 把i清空，不然最后输入最后一位是0
        return head;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

    public static void main(String[] args) {
        ListNode head = ListNode.generalListNode(new int[]{0,3,1,0,4,5,2,0});
        ListNode listNode1 =new PTwo181合并零之间的节点().new Solution().mergeNodes(head);
        ListNode.printListNode(listNode1);
    }
}